/*
 * CourseTeachersList.h
 *
 *  Created on: 9 May 2010
 *      Author: Savramis Sartios
 */

#ifndef TEACHERSCODESLIST_H_
#define TEACHERSCODESLIST_H_
#include "ICourseTeachersList.h"

class CourseTeachersList : public ICourseTeachersList {
public:
	CourseTeachersList();
	virtual ~CourseTeachersList();


	/**
	 * Επιστρέφει έναν Iterator για την προσπέλαση των στοιχειών του map
	 * \return ITeachersCodesListIterator o iterator της λίστας
	 * \throw EmptyIterator εάν δεν μπορεί να δεσμευτεί CourseTeachersIterator
	 */
	virtual ICourseTeachersIterator * getIterator();

	/**
	 * Επιστρέφει το μέγεθος της δομής αποθήκευσης
	 * \return int το μέγεθος
	 */
	virtual int count()const;

/*	*
	 * Επιστρέφει τους καθηγητές που διδάσκουν ένα συγκεκριμένο μάθημα
	 * \param const string *courseCode	το μάθημα
	 * \return vector<string *> τους κωδικούς των καθηγητών που διδάσκουν το μάθημα

	virtual vector<string *> * getTeachers(const string *courseCode)const=0;*/

	/**
	 * Προσθέτει τους κωδικούς των καθηγητών ενός μαθήματος στην δομή αποθήκευσης
	 * \param const string *courseCode ο κωδικός του μαθήματος
	 * \param const vector<string*> *teachers οι κωδικοί των καθηγητών
	 * \throw NullPointer εάν κάποια από τις παραμέτρους είναι null
	 * \return bool true εάν η καταχώρηση έγινε με επιτυχία
	 */
	virtual bool	add(const string *courseCode,const vector<string*> *teachers);

	/**
	 * Επιστρέφει την αρχή της δομής αποθήκευσης
	 * \return iterator προς την δομή
	 */
	virtual map<string*,vector<string*> *>::iterator getStart();

	/**
	 * Επιστρέφει τον αριθμό των καθηγητών του μαθήματος
	 * \throw InvalidCode εάν δεν υπάρχει ο κωδικός του μαθήματος
	 * \throw NullPointer εάν ο κωδικός του μαθήματος είναι null
	*/
	virtual int countTeachers(const string *courseCode);

private:
	map<string *,vector<string *> *> teachers_;
	map<string*,vector<string*> *>::iterator *it_;
};

#endif /* TEACHERSCODESLIST_H_ */
